/*
 * To change this template, choose Tools | Templates
 * and open the template in the editor.
 */

package business;

import java.io.Serializable;
import java.util.ArrayList;
import java.util.List;
import javax.persistence.Basic;
import javax.persistence.CascadeType;
import javax.persistence.Column;
import javax.persistence.Entity;
import javax.persistence.GeneratedValue;
import javax.persistence.GenerationType;
import javax.persistence.Id;
import javax.persistence.JoinColumn;
import javax.persistence.ManyToOne;
import javax.persistence.NamedQueries;
import javax.persistence.NamedQuery;
import javax.persistence.OneToMany;
import javax.persistence.Table;
import javax.persistence.TableGenerator;

/**
 *
 * @author Alberto
 */
@Entity
@Table(name = "empleado")
@NamedQueries({
    @NamedQuery(name = "Empleado.findByCorreouniversidad", query = "SELECT a FROM Empleado a WHERE a.correouniversidad = :correouniversidad")
    })

    public class Empleado implements Serializable {
    private static final long serialVersionUID = 1L; 
    private Integer idempleado;
    private String nombre;
    private String apellidos;
    private String telefono;
    private Rol rol;
    private String correouniversidad;
    private String contrasena;
    private List<Alojamiento> alojamientos;
    private List<Contratoempleado> contratoempleados;
    private List<Inspeccion> inspecciones;

    public Empleado() {
    }

    public Empleado(String nombre, String apellidos, String telefono, Rol rol, String correouniversidad, String contrasena) {
        this.nombre = nombre;
        this.apellidos = apellidos;
        this.telefono = telefono;
        this.rol = rol;
        this.correouniversidad = correouniversidad;
        this.contrasena = contrasena;
        this.alojamientos = new ArrayList<Alojamiento>();
        this.contratoempleados = new ArrayList<Contratoempleado>();
    }

    public void addContrato(Contratoempleado c){
        this.contratoempleados.add(c);
    }

        @TableGenerator(
        name="empleadoGen",
        table="JPA_GENERATOR",
        pkColumnName="GEN_KEY",
        valueColumnName="GEN_VALUE",
        pkColumnValue="EMPLEADO_ID",
        allocationSize=1,
        initialValue=0)
        @Id
    @Basic(optional = false)
    @GeneratedValue(strategy=GenerationType.TABLE,generator="empleadoGen")
    @Column(name = "idempleado", nullable = false)
    public Integer getIdempleado() {
        return idempleado;
    }

    public void setIdempleado(Integer idempleado) {
        this.idempleado = idempleado;
    }

    @Column(name = "nombre")
    public String getNombre() {
        return nombre;
    }

    public void setNombre(String nombre) {
        this.nombre = nombre;
    }

    @Column(name = "apellidos")
    public String getApellidos() {
        return apellidos;
    }

    public void setApellidos(String apellidos) {
        this.apellidos = apellidos;
    }

    @Column(name = "telefono")
    public String getTelefono() {
        return telefono;
    }

    public void setTelefono(String telefono) {
        this.telefono = telefono;
    }

    @JoinColumn(name = "idrol")
    @ManyToOne(cascade=CascadeType.PERSIST)
    public Rol getRol() {
        return rol;
    }

    public void setRol(Rol rol) {
        this.rol = rol;
    }

    @Column(name = "correouniversidad",unique=true)
    public String getCorreouniversidad() {
        return correouniversidad;
    }

    public void setCorreouniversidad(String correouniversidad) {
        this.correouniversidad = correouniversidad;
    }

    @Column(name = "contrasena")
    public String getContrasena() {
        return contrasena;
    }

    public void setContrasena(String contrasena) {
        this.contrasena = contrasena;
    }

    @Override
    public int hashCode() {
        int hash = 0;
        hash += (idempleado != null ? idempleado.hashCode() : 0);
        return hash;
    }

    @Override
    public boolean equals(Object object) {
        // TODO: Warning - this method won't work in the case the id fields are not set
        if (!(object instanceof Empleado)) {
            return false;
        }
        Empleado other = (Empleado) object;
        if ((this.correouniversidad == null && other.correouniversidad != null) || (this.correouniversidad != null && !this.correouniversidad.equals(other.correouniversidad))) {
            return false;
        }
        return true;
    }

    @Override
    public String toString() {
        return "business.Empleado[idempleado=" + idempleado + "]";
    }

    @OneToMany(mappedBy = "empleado")
    public List<Alojamiento> getAlojamientos() {
        return alojamientos;
    }

    public void addAlojamiento(Alojamiento alojamiento){
        this.alojamientos.add(alojamiento);
    }

    public void setAlojamientos(List<Alojamiento> alojamientos) {
        this.alojamientos = alojamientos;
    }

    @OneToMany(mappedBy = "empleado",cascade=CascadeType.PERSIST)
    public List<Contratoempleado> getContratoempleados() {
        return contratoempleados;
    }

    public void setContratoempleados(List<Contratoempleado> contratoempleados) {
        this.contratoempleados = contratoempleados;
    }

    @OneToMany(mappedBy = "empleado",cascade=CascadeType.PERSIST)
    public List<Inspeccion> getInspeccions() {
        return inspecciones;
    }

    public void setInspeccions(List<Inspeccion> inspeccions) {
        this.inspecciones = inspeccions;
    }

     public void addInspeccion(Inspeccion i){
        this.inspecciones.add(i);
    }

}
